using Sinacor.UI.Bovespa.Contabil.Communication;
using Sinacor.Infra.UI.Common;
using System.Collections.Generic;


namespace Sinacor.UI.Bovespa.Contabil.Communication.Translator.ModelToDataContract
{
    public class DespesaNota
    {

        public DespesaNota() { }

        public Bovespa.Contabil.DespesaNota.DespesaNotaRequest ToDespesaNotaRequest(Model.DespesaNota model)
        {
            Bovespa.Contabil.DespesaNota.DespesaNotaRequest to = new Sinacor.UI.Bovespa.Contabil.Communication.Bovespa.Contabil.DespesaNota.DespesaNotaRequest();

            switch (model.BaseDespesa.Value)
            {
                case Model.Enum.TipoBaseDespesa.SobreCorretagem:
                    to.BaseDespesa = Bovespa.Contabil.DespesaNota.TipoBaseDespesa.SobreCorretagem; 
                    break;
                case Model.Enum.TipoBaseDespesa.SobreDesconto:
                    to.BaseDespesa = Bovespa.Contabil.DespesaNota.TipoBaseDespesa.SobreDesconto;
                    break;
                case Model.Enum.TipoBaseDespesa.SobreVolume:
                    to.BaseDespesa = Bovespa.Contabil.DespesaNota.TipoBaseDespesa.SobreVolume;
                    break;
                default:
                    break;
            }
            to.Codigo = model.Codigo;

            if (model.EventoContabil != null)
            {
                to.EventoContabil = new Sinacor.UI.Bovespa.Contabil.Communication.Bovespa.Contabil.DespesaNota.EventoContabilRequest();
                to.EventoContabil.Codigo = (int)model.EventoContabil.Codigo;
                to.EventoContabil.Descricao = model.EventoContabil.Descricao;
            }

            to.IncideIrrf = model.IncideIrrf;
            to.PercentualDespesa = (decimal)model.PercentualDespesa;
            to.PregaoFinal = (System.DateTime) model.PregaoFinal;
            to.PregaoInicial = (System.DateTime) model.PregaoInicial;
            to.ValorMaximo = (decimal)model.ValorMaximo;
            to.ValorMinimo = (decimal)model.ValorMinimo;
            return to;
        }

        public List<Bovespa.Contabil.DespesaNota.DespesaNotaRequest> ToDespesaNotaRequest(ModelCollection<Model.DespesaNota> modelList)
        {
            List<Bovespa.Contabil.DespesaNota.DespesaNotaRequest> to = new List<Bovespa.Contabil.DespesaNota.DespesaNotaRequest>();

            foreach (Model.DespesaNota item in modelList)
            {
                to.Add(ToDespesaNotaRequest(item));
            }
            return to;
        }

        public Bovespa.Contabil.DespesaNota.FiltroDespesaNotaRequest ToFiltroDespesaNotaRequest(Model.Parameter.FiltroDespesaNota parameter)
        {
            Bovespa.Contabil.DespesaNota.FiltroDespesaNotaRequest to = new Sinacor.UI.Bovespa.Contabil.Communication.Bovespa.Contabil.DespesaNota.FiltroDespesaNotaRequest();
            to.BaseDespesa = (Bovespa.Contabil.DespesaNota.TipoBaseDespesa?) parameter.BaseDespesa;
            to.Codigo = parameter.Codigo;
            to.EventoContabil = parameter.EventoContabil;
            to.IncideIrrf = parameter.IncideIrrf;
            to.PercentualDespesa = parameter.PercentualDespesa;
            to.PregaoFinal = parameter.PregaoFinal;
            to.PregaoInicial = parameter.PregaoInicial;
            to.ValorMaximo = parameter.ValorMaximo;
            to.ValorMinimo = parameter.ValorMinimo;
            return to;
        }

        public List<Bovespa.Contabil.DespesaNota.FiltroDespesaNotaRequest> ToFiltroDespesaNotaRequest(ModelCollection<Model.Parameter.FiltroDespesaNota> parameterList)
        {
            List<Bovespa.Contabil.DespesaNota.FiltroDespesaNotaRequest> to = new List<Bovespa.Contabil.DespesaNota.FiltroDespesaNotaRequest>();

            foreach (Model.Parameter.FiltroDespesaNota item in parameterList)
            {
                to.Add(ToFiltroDespesaNotaRequest(item));
            }
            return to;
        }

        public Bovespa.Contabil.DespesaNota.FiltroDespesaNotaChaveRequest ToFiltroDespesaNotaChaveRequest(Model.Parameter.FiltroDespesaNotaChave parameter)
        {
            Bovespa.Contabil.DespesaNota.FiltroDespesaNotaChaveRequest to = new Bovespa.Contabil.DespesaNota.FiltroDespesaNotaChaveRequest();
            to.Codigo = parameter.Codigo;
            to.PregaoInicial = parameter.PregaoInicial;
            return to;
        }

        public List<Bovespa.Contabil.DespesaNota.FiltroDespesaNotaChaveRequest> ToFiltroDespesaNotaChaveRequest(ModelCollection<Model.Parameter.FiltroDespesaNotaChave> parameterList)
        {
            List<Bovespa.Contabil.DespesaNota.FiltroDespesaNotaChaveRequest> to = new List<Sinacor.UI.Bovespa.Contabil.Communication.Bovespa.Contabil.DespesaNota.FiltroDespesaNotaChaveRequest>();

            foreach (Model.Parameter.FiltroDespesaNotaChave item in parameterList)
            {
                to.Add(ToFiltroDespesaNotaChaveRequest(item));
            }
            return to;
        }
    }
}